Contents
Setup and data wrangling
Data tables
Swimmer’s plot
Supplemental figure
Survival analysis
Stratified survival analysis
Create KM for OS and PFS, stratify by HRCA
KM of OS & PFS, stratified by cell dose
KM of PFS, dose level 1-3 vs 4
Create KM for OS, stratified by sCR/CR vs VGPR/PR
Create KM for OS & PFS, stratified by treatment lines <8 vs >=8
Create KM for OS & PFS, stratified by hx of prior allo
Create KM for OS & PFS, stratified by receipt of prior BCMA-directed therapy
Create KM for OS & PFS, stratified by triple refractory disease
Create KM for OS & PFS, stratified by penta refractory disease
Create KM for OS & PFS, stratified by tumor burden (BMPCs <=30 vs >30)
Create KM for OS & PFS, stratified by sBCMA at day 90 (< vs >= median)
Create KM for OS & PFS, stratified by sBCMA at day 60 (< vs >= median)
Create KM for OS & PFS, stratified by BCMA ABC at screening
Regression analysis
Scatterplot
Probability plots
Setup and data wrangling
Load necessary packages
Read in the data
Show code
db1 = read_excel ( path = "9762 data for analysis 1.23.24.xlsx" , sheet = "Survival" )
dataset <- db1 %>%
mutate (
dx_dt = ymd ( dx_dt ) ,
infuse_dt = ymd ( infuse_dt ) ,
birthdate = ymd ( birthdate ) ,
dt_relapse = ymd ( dt_relapse ) ,
Death.or.DLC = ymd ( Death.or.DLC ) ,
Death.or.relapse.or.DLC = ymd ( Death.or.relapse.or.DLC ) ,
Days.to.death.or.DLC = Death.or.DLC - infuse_dt ,
Days.to.death.or.relapse.or.DLC = Death.or.relapse.or.DLC - infuse_dt ,
Days.from.dx.to.infusion = infuse_dt - dx_dt ,
Age = ( infuse_dt - birthdate ) / 365
)
Data tables
Table 1 reproduction
Show code
theme_gtsummary_compact ( )
dataset %>%
transmute (
"Age (years)" = Age ,
"Female sex" = ifelse ( sex == "f" , 1 , 0 ) ,
"Race" = recode ( race , "asian" = "Asian" , "white" = "White" ) ,
"ECOG performance status" = ecog ,
"Median time from diagnosis to CAR T cell therapy" = Days.from.dx.to.infusion / 365 ,
"Disease subtype" = factor ( subtype_category , levels = c ( "IgA" , "IgG" , "IgM" , "Light chain" , "Oligosecretory" , "Primary plasma cell leukemia" ) ) ,
"ISS disease stage at diagnosis" = iss ,
"Revised ISS disease stage at diagnosis" = riss ,
"ISS disease stage at enrollment" = iss_enrollment ,
"Revised ISS disease stage at enrollment" = riss_enrollment ,
#"High-risk cytogenetic abnormality at any time" = HRCA,
"t(4;14) any" = t414_any ,
"t(14;16) any" = t1416_any ,
"del(17p) any" = del17p_any ,
"amp(1q) any" = amp1q_any ,
"High bone marrow tumor burden" = ifelse ( High.tumor.burden == 1 , ">30%" , "10-30%" ) ,
"Extramedullary disease" = extramedullary ,
"Circulating plasma cells at screening" = cpcs ,
"Tumor BCMA expression (ABC)" = bcma_scrn ,
"Number of previous antimyeoma regimens" = factor ( case_when (
no_priortx <= 6 ~ "4-6" ,
no_priortx > 6 & no_priortx <= 9 ~ "7-9" ,
no_priortx > 9 ~ "10 or more" ) , levels = c ( "4-6" , "7-9" , "10 or more" ) ) ,
"Previous autologous HCT" = factor ( case_when (
no_auto == 0 ~ "0" ,
no_auto == 1 ~ "1" ,
no_auto > 1 ~ ">1" ) , levels = c ( "0" ,"1" ,">1" ) ) ,
"Previous allogeneic HCT" = allo
) %>%
tbl_summary (
missing = "ifany" ,
statistic = list (
all_continuous ( ) ~ "{median} ({min} to {max})" ,
all_categorical ( ) ~ "{n} ({p}%)"
)
) %>%
bold_labels ( ) %>%
add_variable_grouping (
"High-risk cytogenetic abnormality at any time" = c ( "t(4;14) any" , "t(14;16) any" , "del(17p) any" , "amp(1q) any" )
)
Characteristic
N = 31
Age (years)
64 (38 to 77)
Unknown
6
Female sex
9 (36%)
Unknown
6
Race
Asian
3 (12%)
White
22 (88%)
Unknown
6
ECOG performance status
0
5 (20%)
1
17 (68%)
2
3 (12%)
Unknown
6
Median time from diagnosis to CAR T cell therapy
5.1 (1.6 to 14.6)
Unknown
6
Disease subtype
IgA
4 (16%)
IgG
13 (52%)
IgM
2 (8.0%)
Light chain
3 (12%)
Oligosecretory
1 (4.0%)
Primary plasma cell leukemia
2 (8.0%)
Unknown
6
ISS disease stage at diagnosis
1
4 (20%)
2
6 (30%)
3
10 (50%)
Unknown
11
Revised ISS disease stage at diagnosis
1
2 (18%)
2
3 (27%)
3
6 (55%)
Unknown
20
ISS disease stage at enrollment
1
12 (63%)
2
5 (26%)
3
2 (11%)
Unknown
12
Revised ISS disease stage at enrollment
1
6 (32%)
2
11 (58%)
3
2 (11%)
Unknown
12
High-risk cytogenetic abnormality at any time
t(4;14) any
2 (8.0%)
Unknown
6
t(14;16) any
2 (8.0%)
Unknown
6
del(17p) any
13 (52%)
Unknown
6
amp(1q) any
3 (12%)
Unknown
6
High bone marrow tumor burden
>30%
17 (68%)
10-30%
8 (32%)
Unknown
6
Extramedullary disease
11 (44%)
Unknown
6
Circulating plasma cells at screening
5 (20%)
Unknown
6
Tumor BCMA expression (ABC)
620 (175 to 5,521)
Unknown
6
Number of previous antimyeoma regimens
4-6
6 (24%)
7-9
13 (52%)
10 or more
6 (24%)
Unknown
6
Previous autologous HCT
0
5 (20%)
1
13 (52%)
>1
7 (28%)
Unknown
6
Previous allogeneic HCT
5 (20%)
Unknown
6
Swimmer’s plot
Show code
swimmer_data = as.data.frame ( read_excel ( path = "9762 swimmer.xlsx" , sheet = "Response" ) ) %>%
mutate (
Response_start = Response_start / 30 ,
Response_end = Response_end / 30 ,
Arrow_start = Arrow_start / 30 ,
Time = Time / 30 ,
Response = factor ( Response , levels= c ( "PD" ,"sCR" ,"CR" ,"VGPR" ,"PR" ,"SD" ) )
)
pastel1_palette <- brewer.pal ( 8 , "Pastel1" ) [ 1 : 6 ]
swimmer_plot ( df= filter ( swimmer_data , ! is.na ( Response ) ) ,
id= "Number" ,
end= "Response_end" ,
name_fill= "Response" ,
stratify = "Dose_level" ,
) +
scale_fill_manual ( values = pastel1_palette ) +
swimmer_arrows ( df_arrows = filter ( swimmer_data ,! is.na ( Arrow_start ) ) ,id= "Number" ,arrow_start= "Arrow_start" , name_col = 'Response' , type = "open" , cex= 1 , arrow_positions = c ( 1 ,5 ) ) +
swimmer_points ( df_points= filter ( swimmer_data ,! is.na ( Event ) ) ,id= 'Number' ,name_shape = "Event" , time= 'Time' ,size= 2 ,fill= 'white' ,col= "black" ) +
scale_y_continuous ( name = "Time since infusion (Months)" ,breaks = seq ( 0 ,10000 ,by= 12 ) ) +
guides ( fill = guide_legend ( title = "Response" ) , colour = FALSE ) # Hide the legend for arrows
sBCMA plots
Show code
sBCMA_data = as.data.frame ( read_excel ( path = "sBCMA data.xlsx" ) )
ggplot ( sBCMA_data , aes ( x = timepoint / 30 , y = sBCMA , color = Tumor.burden ) ) +
geom_point ( shape = 16 , size = 2 ) +
theme_classic ( ) +
labs ( x = "Time (months)" , y = "sBCMA" ) +
scale_color_discrete ( name = "Tumor burden" ) +
facet_wrap ( ~ Number , scales = "free_y" , ncol = 5 ) + # Facet by the "Number" variable with free y-axes and 2 columns
scale_y_log10 ( limits = c ( 0.01 , 10000 ) ) +
scale_x_continuous ( breaks = seq ( 0 , 48 , by = 12 ) ) +
theme ( strip.text = element_text ( size = 9 ) ) +
geom_vline ( aes ( xintercept = Relapse.time / 30 ) , linetype = "dashed" , color = "black" ) # Add vertical line
Survival analysis
Length of follow-up
Show code
data1 = dataset %>%
mutate (
Reverse_death = ifelse ( death == 1 , 0 ,1 )
)
#quantile(prodlim(Hist(time = Real.days.DLC/30, Real.death )~1, data = data1, reverse = TRUE ) )
reverse_km_OS <- survfit ( Surv ( Days.to.death.or.DLC / 30 , Reverse_death ) ~ 1 , data1 )
reverse_km_OS
Call: survfit(formula = Surv(Days.to.death.or.DLC/30, Reverse_death) ~
1, data = data1)
6 observations deleted due to missingness
n events median 0.95LCL 0.95UCL
[1,] 25 6 58.6 47.4 NA
Create KM for OS and PFS
Show code
km_OS <- survfit ( Surv ( Days.to.death.or.DLC / 30 , death ) ~ 1 , data = dataset )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS $ plot <- OS $ plot + geom_hline ( yintercept = 0.5 , linetype = "dashed" , color = "grey" ) + annotate ( "text" , x = med_OS $ median + 0.5 , y = 0.54 , label = paste ( signif ( med_OS $ median , 2 ) , "(95% CI, " , signif ( med_OS $ lower , 2 ) , "to" , signif ( med_OS $ upper , 2 ) ,")" ) , hjust = 0 , size = 5 )
OS
Show code
Call: survfit(formula = Surv(Days.to.death.or.DLC/30, death) ~ 1, data = dataset)
6 observations deleted due to missingness
n events median 0.95LCL 0.95UCL
[1,] 25 19 32.1 20.4 NA
Show code
Call: survfit(formula = Surv(Days.to.death.or.DLC/30, death) ~ 1, data = dataset)
6 observations deleted due to missingness
time n.risk n.event survival std.err lower 95% CI upper 95% CI
12 22 3 0.88 0.065 0.761 1
Show code
km_PFS <- survfit ( Surv ( Days.to.death.or.relapse.or.DLC / 30 , relapse ) ~ 1 , data = dataset )
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS $ plot <- PFS $ plot + geom_hline ( yintercept = 0.5 , linetype = "dashed" , color = "grey" ) + annotate ( "text" , x = med_PFS $ median + 0.5 , y = 0.54 , label = paste ( signif ( med_PFS $ median , 2 ) , "(95% CI, " , signif ( med_PFS $ lower , 2 ) , "to" , signif ( med_PFS $ upper , 2 ) ,")" ) , hjust = 0 , size = 5 )
PFS
Show code
Call: survfit(formula = Surv(Days.to.death.or.relapse.or.DLC/30, relapse) ~
1, data = dataset)
6 observations deleted due to missingness
n events median 0.95LCL 0.95UCL
[1,] 25 23 18 8.73 27.5
Show code
Call: survfit(formula = Surv(Days.to.death.or.relapse.or.DLC/30, relapse) ~
1, data = dataset)
6 observations deleted due to missingness
time n.risk n.event survival std.err lower 95% CI upper 95% CI
12 16 9 0.64 0.096 0.477 0.859
PFS and OS on the same plot
Show code
OS_EFS <- ggsurvplot_combine ( list ( km_PFS , km_OS ) ,
data= dataset ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.3 ,
tables.theme = theme_cleantable ( ) ,
surv.median.line = "hv" , # Specify median survival
ggtheme = theme_classic ( ) +
theme (
axis.text.x = element_text ( size = 12 ) , # Increase x-axis label font size
axis.text.y = element_text ( size = 12 ) , # Increase y-axis label font size
axis.title.x = element_text ( size = 14 ) , # Increase x-axis title font size
axis.title.y = element_text ( size = 14 ) , # Increase y-axis title font size
plot.title = element_text ( size = 12 ) , # Increase plot title font size
legend.text = element_text ( size = 12 ) , # Increase legend text font size
legend.title = element_text ( size = 12 ) # Increase legend title font size
) ,
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "PFS & OS (%)" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
#fun=formula,
legend.labs = c ( "PFS" ,"OS" ) ,
surv.scale = "percent" ,
censor= FALSE
)
OS_EFS $ plot <- OS_EFS $ plot +
geom_hline ( yintercept = 0.5 , linetype = "dashed" , color = "grey" ) +
geom_vline ( xintercept = median ( km_OS ) [ 1 ] , linetype = "dashed" , color = "grey" ) +
geom_vline ( xintercept = median ( km_PFS ) [ 1 ] , linetype = "dashed" , color = "grey" ) +
annotate ( "text" , x = med_OS $ median + 0.5 , y = 0.85 , label = paste ( signif ( med_OS $ median , 2 ) , "(" , signif ( med_OS $ lower , 2 ) , "-" , signif ( med_OS $ upper , 2 ) ,")" ) , hjust = 0 , size = 5 ) +
annotate ( "text" , x = med_PFS $ median + 0.5 , y = 0.95 , label = paste ( signif ( med_PFS $ median , 2 ) , "(" , signif ( med_PFS $ lower , 2 ) , "-" , signif ( med_PFS $ upper , 2 ) ,")" ) , hjust = 0 , size = 5 )
OS_EFS
Create KM for DOR
Show code
km_DOR <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC - 28 ) / 30 , relapse ) ~ 1 , data = dataset )
med_DOR <- surv_median ( km_DOR )
DOR <- ggsurvplot ( km_DOR ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Duration of response" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
DOR $ plot <- DOR $ plot + geom_hline ( yintercept = 0.5 , linetype = "dashed" , color = "grey" ) + annotate ( "text" , x = med_DOR $ median + 0.5 , y = 0.54 , label = paste ( signif ( med_DOR $ median , 2 ) , "(95% CI, " , signif ( med_DOR $ lower , 2 ) , "to" , signif ( med_DOR $ upper , 2 ) ,")" ) , hjust = 0 , size = 5 )
DOR
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC - 28)/30,
relapse) ~ 1, data = dataset)
6 observations deleted due to missingness
n events median 0.95LCL 0.95UCL
[1,] 25 23 17.1 7.8 26.6
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC - 28)/30,
relapse) ~ 1, data = dataset)
6 observations deleted due to missingness
time n.risk n.event survival std.err lower 95% CI upper 95% CI
12 14 11 0.56 0.0993 0.396 0.793
Stratified survival analysis
Create KM for OS and PFS, stratify by HRCA
Show code
km_OS <- survfit ( Surv ( Days.to.death.or.DLC / 30 , death ) ~ HRCA , data = dataset )
km_OS
Call: survfit(formula = Surv(Days.to.death.or.DLC/30, death) ~ HRCA,
data = dataset)
6 observations deleted due to missingness
n events median 0.95LCL 0.95UCL
HRCA=0 10 7 32.1 18.5 NA
HRCA=1 15 12 27.5 17.7 NA
Show code
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" ) ,
legend.labs = c ( "Standard" ,"High risk" )
)
#OS$plot <- OS$plot + geom_hline(yintercept = 0.5, linetype = "dashed", color = "grey") + annotate("text", x = med_OS$median + 0.5, y = 0.54, label = paste("Median =", signif(med_OS$median, 2), "(95% CI, ", signif(med_OS$lower, 2), "to", signif(med_OS$upper, 2),")"), hjust = 0, size = 5)
OS
Show code
km_PFS <- survfit ( Surv ( Days.to.death.or.relapse.or.DLC / 30 , relapse ) ~ HRCA , data = dataset )
km_PFS
Call: survfit(formula = Surv(Days.to.death.or.relapse.or.DLC/30, relapse) ~
HRCA, data = dataset)
6 observations deleted due to missingness
n events median 0.95LCL 0.95UCL
HRCA=0 10 9 20.6 7.33 NA
HRCA=1 15 14 14.0 8.73 NA
Show code
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" ) ,
legend.labs = c ( "Standard" ,"High risk" )
)
#PFS$plot <- PFS$plot + geom_hline(yintercept = 0.5, linetype = "dashed", color = "grey") + annotate("text", x = med_PFS$median + 0.5, y = 0.54, label = paste("Median =", signif(med_PFS$median, 2), "(95% CI, ", signif(med_PFS$lower, 2), "to", signif(med_PFS$upper, 2),")"), hjust = 0, size = 5)
PFS
KM of OS & PFS, stratified by cell dose
Show code
km_PFS <- survfit ( Surv ( Days.to.death.or.relapse.or.DLC / 30 , relapse ) ~ intended_cell_dose , data = dataset )
km_PFS
Call: survfit(formula = Surv(Days.to.death.or.relapse.or.DLC/30, relapse) ~
intended_cell_dose, data = dataset)
6 observations deleted due to missingness
n events median 0.95LCL
intended_cell_dose=Dose level 1 - 50E6 7 6 18.00 5.87
intended_cell_dose=Dose level 2 - 150E6 8 7 24.32 12.20
intended_cell_dose=Dose level 3 - 300E6 7 7 23.20 12.63
intended_cell_dose=Dose level 4 - 450E6 3 3 7.87 3.07
0.95UCL
intended_cell_dose=Dose level 1 - 50E6 NA
intended_cell_dose=Dose level 2 - 150E6 NA
intended_cell_dose=Dose level 3 - 300E6 NA
intended_cell_dose=Dose level 4 - 450E6 NA
Show code
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.4 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" ) ,
#legend.labs = c("Standard","High risk")
)
PFS
Show code
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC ) / 30 , death ) ~ intended_cell_dose , data = data1 )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.4 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC)/30, death) ~ intended_cell_dose,
data = data1)
6 observations deleted due to missingness
n events median 0.95LCL
intended_cell_dose=Dose level 1 - 50E6 7 7 25.4 10.1
intended_cell_dose=Dose level 2 - 150E6 8 4 58.4 27.5
intended_cell_dose=Dose level 3 - 300E6 7 5 32.1 20.4
intended_cell_dose=Dose level 4 - 450E6 3 3 18.5 16.6
0.95UCL
intended_cell_dose=Dose level 1 - 50E6 NA
intended_cell_dose=Dose level 2 - 150E6 NA
intended_cell_dose=Dose level 3 - 300E6 NA
intended_cell_dose=Dose level 4 - 450E6 NA
KM of PFS, dose level 1-3 vs 4
Show code
data1 <- dataset %>%
mutate (
dose_level = ifelse ( intended_cell_dose == "Dose level 1 - 50E6" ,"1" ,"2-4" )
)
km_PFS <- survfit ( Surv ( Days.to.death.or.relapse.or.DLC / 30 , relapse ) ~ dose_level , data = data1 )
km_PFS
Call: survfit(formula = Surv(Days.to.death.or.relapse.or.DLC/30, relapse) ~
dose_level, data = data1)
6 observations deleted due to missingness
n events median 0.95LCL 0.95UCL
dose_level=1 7 6 18.0 5.87 NA
dose_level=2-4 18 17 17.5 8.73 31.7
Show code
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,60 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "Level 1-3" ,"Level 4" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" ) ,
pval.coord = c ( 47 , 0.8 )
)
PFS
Create KM for OS, stratified by sCR/CR vs VGPR/PR
Show code
data1 <- dataset %>%
mutate (
response.category = recode ( best_response , "scr" = "sCR/CR" , "cr" = "sCR/CR" , "vgpr" = "VGPR/PR" , "pr" = "VGPR/PR" )
)
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC ) / 30 , death ) ~ response.category , data = data1 )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "sCR/CR" ,"VGPR/PR" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC)/30, death) ~ response.category,
data = data1)
6 observations deleted due to missingness
n events median 0.95LCL 0.95UCL
response.category=sCR/CR 17 12 35.5 27.5 NA
response.category=VGPR/PR 8 7 19.1 17.1 NA
Show code
km_PFS <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC - 28 ) / 30 , relapse ) ~ response.category , data = data1 )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "sCR/CR" ,"VGPR/PR" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC - 28)/30,
relapse) ~ response.category, data = data1)
6 observations deleted due to missingness
n events median 0.95LCL 0.95UCL
response.category=sCR/CR 17 15 22.27 17.07 30.8
response.category=VGPR/PR 8 8 7.28 6.93 NA
Create KM for OS & PFS, stratified by treatment lines <8 vs >=8
Show code
data1 <- dataset %>%
mutate (
prior.lines.8 = ifelse ( no_priortx >= 8 , 1 ,0 )
)
km_PFS <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC ) / 30 , relapse ) ~ prior.lines.8 , data = data1 )
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "<8" ,"\u22658" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC)/30,
relapse) ~ prior.lines.8, data = data1)
6 observations deleted due to missingness
n events median 0.95LCL 0.95UCL
prior.lines.8=0 11 10 12.6 8.37 NA
prior.lines.8=1 14 13 21.1 12.20 NA
Show code
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC ) / 30 , death ) ~ prior.lines.8 , data = data1 )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "<8" ,"\u22658" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC)/30, death) ~ prior.lines.8,
data = data1)
6 observations deleted due to missingness
n events median 0.95LCL 0.95UCL
prior.lines.8=0 11 7 20.4 17.7 NA
prior.lines.8=1 14 12 33.0 25.4 NA
Create KM for OS & PFS, stratified by hx of prior allo
Show code
data1 <- dataset %>%
mutate (
prior.lines.8 = ifelse ( no_priortx >= 8 , 1 ,0 )
)
km_PFS <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC ) / 30 , relapse ) ~ allo , data = data1 )
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC)/30,
relapse) ~ allo, data = data1)
6 observations deleted due to missingness
n events median 0.95LCL 0.95UCL
allo=0 20 19 16.0 8.07 28.2
allo=1 5 4 21.1 12.20 NA
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC)/30,
relapse) ~ allo, data = data1)
6 observations deleted due to missingness
allo=0
time n.risk n.event survival std.err
12.000 12.000 8.000 0.600 0.110
lower 95% CI upper 95% CI
0.420 0.858
allo=1
time n.risk n.event survival std.err
12.000 4.000 1.000 0.800 0.179
lower 95% CI upper 95% CI
0.516 1.000
Show code
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC ) / 30 , death ) ~ allo , data = data1 )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC)/30, death) ~ allo,
data = data1)
6 observations deleted due to missingness
n events median 0.95LCL 0.95UCL
allo=0 20 15 27.5 20.4 NA
allo=1 5 4 61.5 17.7 NA
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC)/30, death) ~ allo,
data = data1)
6 observations deleted due to missingness
allo=0
time n.risk n.event survival std.err
12.0000 17.0000 3.0000 0.8500 0.0798
lower 95% CI upper 95% CI
0.7071 1.0000
allo=1
time n.risk n.event survival std.err
12 5 0 1 0
lower 95% CI upper 95% CI
1 1
Create KM for OS & PFS, stratified by receipt of prior BCMA-directed therapy
Show code
data1 <- dataset %>%
mutate (
prior.lines.8 = ifelse ( no_priortx >= 8 , 1 ,0 )
)
km_PFS <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC ) / 30 , relapse ) ~ any_bcma_tx , data = data1 )
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC)/30,
relapse) ~ any_bcma_tx, data = data1)
6 observations deleted due to missingness
n events median 0.95LCL 0.95UCL
any_bcma_tx=0 22 20 18.0 8.73 28.2
any_bcma_tx=1 3 3 12.2 5.87 NA
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC)/30,
relapse) ~ any_bcma_tx, data = data1)
6 observations deleted due to missingness
any_bcma_tx=0
time n.risk n.event survival std.err
12.000 14.000 8.000 0.636 0.103
lower 95% CI upper 95% CI
0.464 0.873
any_bcma_tx=1
time n.risk n.event survival std.err
12.000 2.000 1.000 0.667 0.272
lower 95% CI upper 95% CI
0.300 1.000
Show code
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC ) / 30 , death ) ~ any_bcma_tx , data = data1 )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC)/30, death) ~ any_bcma_tx,
data = data1)
6 observations deleted due to missingness
n events median 0.95LCL 0.95UCL
any_bcma_tx=0 22 17 27.5 20.4 NA
any_bcma_tx=1 3 2 32.1 10.1 NA
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC)/30, death) ~ any_bcma_tx,
data = data1)
6 observations deleted due to missingness
any_bcma_tx=0
time n.risk n.event survival std.err
12.0000 20.0000 2.0000 0.9091 0.0613
lower 95% CI upper 95% CI
0.7966 1.0000
any_bcma_tx=1
time n.risk n.event survival std.err
12.000 2.000 1.000 0.667 0.272
lower 95% CI upper 95% CI
0.300 1.000
Create KM for OS & PFS, stratified by triple refractory disease
Show code
km_PFS <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC ) / 30 , relapse ) ~ triple_ref , data = dataset )
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC)/30,
relapse) ~ triple_ref, data = dataset)
6 observations deleted due to missingness
n events median 0.95LCL 0.95UCL
triple_ref=0 5 5 12.2 8.37 NA
triple_ref=1 20 18 18.0 8.73 28.2
Show code
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC ) / 30 , death ) ~ triple_ref , data = dataset )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC)/30, death) ~ triple_ref,
data = dataset)
6 observations deleted due to missingness
n events median 0.95LCL 0.95UCL
triple_ref=0 5 4 27.5 18.5 NA
triple_ref=1 20 15 32.1 20.4 NA
Create KM for OS & PFS, stratified by penta refractory disease
Show code
km_PFS <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC ) / 30 , relapse ) ~ pentaref , data = dataset )
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC)/30,
relapse) ~ pentaref, data = dataset)
6 observations deleted due to missingness
n events median 0.95LCL 0.95UCL
pentaref=0 8 8 16.0 12.20 NA
pentaref=1 17 15 21.1 8.07 37.4
Show code
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC ) / 30 , death ) ~ triple_ref , data = dataset )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC)/30, death) ~ triple_ref,
data = dataset)
6 observations deleted due to missingness
n events median 0.95LCL 0.95UCL
triple_ref=0 5 4 27.5 18.5 NA
triple_ref=1 20 15 32.1 20.4 NA
Create KM for OS & PFS, stratified by tumor burden (BMPCs <=30 vs >30)
Show code
km_PFS <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC ) / 30 , relapse ) ~ High.tumor.burden , data = dataset )
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "Low" ,"High" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC)/30,
relapse) ~ High.tumor.burden, data = dataset)
6 observations deleted due to missingness
n events median 0.95LCL 0.95UCL
High.tumor.burden=0 8 7 24.3 18.00 NA
High.tumor.burden=1 17 16 12.6 8.37 27.1
Show code
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC ) / 30 , death ) ~ High.tumor.burden , data = dataset )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "Low" ,"High" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC)/30, death) ~ High.tumor.burden,
data = dataset)
6 observations deleted due to missingness
n events median 0.95LCL 0.95UCL
High.tumor.burden=0 8 5 48.6 33.0 NA
High.tumor.burden=1 17 14 22.8 17.7 NA
Show code
[1] 2.915
Show code
km_PFS <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC - 90 ) / 30 , relapse ) ~ sBCMA.high , data = data1 )
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "Low" ,"High" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC - 90)/30,
relapse) ~ sBCMA.high, data = data1)
n events median 0.95LCL 0.95UCL
sBCMA.high=0 10 10 21.80 15.00 NA
sBCMA.high=1 10 8 7.28 4.33 NA
Show code
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC - 90 ) / 30 , death ) ~ sBCMA.high , data = data1 )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "Low" ,"High" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC - 90)/30, death) ~
sBCMA.high, data = data1)
n events median 0.95LCL 0.95UCL
sBCMA.high=0 10 7 55.4 30.0 NA
sBCMA.high=1 10 8 18.5 12.5 NA
Show code
[1] 5.415
Show code
km_PFS <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC - 60 ) / 30 , relapse ) ~ sBCMA.high , data = data1 )
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "Low" ,"High" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC - 60)/30,
relapse) ~ sBCMA.high, data = data1)
n events median 0.95LCL 0.95UCL
sBCMA.high=0 12 12 20.2 10.63 NA
sBCMA.high=1 12 10 11.1 6.07 NA
Show code
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC - 60 ) / 30 , death ) ~ sBCMA.high , data = data1 )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "Low" ,"High" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC - 60)/30, death) ~
sBCMA.high, data = data1)
n events median 0.95LCL 0.95UCL
sBCMA.high=0 12 8 33.5 30.1 NA
sBCMA.high=1 12 10 17.1 13.5 NA
Create KM for OS & PFS, stratified by BCMA ABC at screening
Show code
[1] 620
Show code
km_PFS <- survfit ( Surv ( ( Days.to.death.or.relapse.or.DLC ) / 30 , relapse ) ~ BCMA.high , data = data1 )
med_PFS <- surv_median ( km_PFS )
PFS <- ggsurvplot ( km_PFS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Progression-free survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "Low" ,"High" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
PFS
Show code
Call: survfit(formula = Surv((Days.to.death.or.relapse.or.DLC)/30,
relapse) ~ BCMA.high, data = data1)
n events median 0.95LCL 0.95UCL
BCMA.high=0 12 12 13.3 8.07 NA
BCMA.high=1 13 11 21.1 8.37 NA
Show code
km_OS <- survfit ( Surv ( ( Days.to.death.or.DLC ) / 30 , death ) ~ BCMA.high , data = data1 )
med_OS <- surv_median ( km_OS )
OS <- ggsurvplot ( km_OS ,
pval= TRUE ,
conf.int = TRUE ,
risk.table = TRUE , # Add risk table
fontsize = 6 ,
risk.table.col = "strata" , # Change risk table color by groups
tables.height = 0.25 ,
tables.theme = theme_cleantable ( ) ,
#surv.median.line = "hv", # Specify median survival
#ggtheme = theme_bw(), # Change ggplot2 theme
#palette = c("#E7B800", "#2E9FDF"),
xlab= "Time (months)" , ylab = "Overall survival" ,
xlim = c ( 0 ,65 ) , break.x.by = c ( 12 ) ,
ylim = c ( 0 ,1 ) , break.y.by = c ( 0.25 ) ,
legend.labs = c ( "Low" ,"High" ) ,
legend = "none" ,
surv.scale= "percent" ,
font.main = c ( 16 , "plain" , "black" ) ,
font.x = c ( 16 , "plain" , "black" ) ,
font.y = c ( 16 , "plain" , "black" ) ,
font.caption = c ( 16 , "plain" , "black" ) ,
font.tickslab = c ( 16 , "plain" , "black" )
)
OS
Show code
Call: survfit(formula = Surv((Days.to.death.or.DLC)/30, death) ~ BCMA.high,
data = data1)
n events median 0.95LCL 0.95UCL
BCMA.high=0 12 8 22.8 18.5 NA
BCMA.high=1 13 11 35.5 17.7 NA
Regression analysis
Cox regression
Show code
theme_gtsummary_compact ( )
preds <- c ( "HRCA" , "cnLOH" , "response.category" , "intended_cell_dose" , "High.tumor.burden" ,"any_bcma_tx" ,"pentaref" ,"triple_ref" ,"bcma_scrn" , "sBCMA.d90" , "sBCMA.d60" , "sbcma_nadir" ,"sbcma_nadir_timepoint" )
data1 <- dataset %>%
mutate (
response.category = recode ( best_response , "scr" = "sCR/CR" , "cr" = "sCR/CR" , "vgpr" = "VGPR/PR" , "pr" = "VGPR/PR" ) ,
sBCMA.d90 = sBCMA.d90 / 10 ,
sBCMA.d60 = sBCMA.d60 / 10 ,
sbcma_nadir = sbcma_nadir / 10 ,
bcma_scrn = log10 ( bcma_scrn )
)
uv_tab_OS <- tbl_uvregression (
data1 [ c ( preds ) ] ,
method = coxph ,
y = Surv ( data1 $ Days.to.death.or.DLC , data1 $ death ) ,
exponentiate = TRUE
) %>%
sort_p ( )
uv_tab_PFS <- tbl_uvregression (
data1 [ c ( preds ) ] ,
method = coxph ,
y = Surv ( data1 $ Days.to.death.or.relapse.or.DLC , data1 $ relapse ) ,
exponentiate = TRUE
)
tbl_merge ( list ( uv_tab_OS , uv_tab_PFS ) , tab_spanner = c ( "**OS**" , "**PFS**" ) )
Characteristic
OS
PFS
N
HR
95% CI
p-value
N
HR
95% CI
p-value
sBCMA.d90
21
3.21
1.39, 7.42
0.006
21
2.59
1.02, 6.55
0.045
sBCMA.d60
24
1.50
1.12, 2.02
0.007
24
1.53
1.07, 2.19
0.019
sbcma_nadir
22
1.42
1.05, 1.93
0.024
22
1.58
1.00, 2.50
0.052
response.category
25
25
sCR/CR
—
—
—
—
VGPR/PR
3.28
1.16, 9.25
0.025
1.95
0.80, 4.74
0.14
High.tumor.burden
25
2.87
0.93, 8.91
0.067
25
2.58
0.92, 7.28
0.073
bcma_scrn
25
0.21
0.03, 1.58
0.13
25
0.35
0.06, 1.96
0.2
intended_cell_dose
25
25
Dose level 1 - 50E6
—
—
—
—
Dose level 2 - 150E6
0.53
0.14, 1.98
0.3
0.34
0.10, 1.17
0.087
Dose level 3 - 300E6
1.04
0.29, 3.74
>0.9
0.45
0.14, 1.45
0.2
Dose level 4 - 450E6
2.96
0.62, 14.1
0.2
2.98
0.66, 13.5
0.2
sbcma_nadir_timepoint
22
1.00
0.99, 1.00
0.4
22
1.00
0.99, 1.00
0.5
cnLOH
22
1.23
0.42, 3.59
0.7
22
0.99
0.36, 2.69
>0.9
pentaref
25
0.90
0.33, 2.45
0.8
25
0.76
0.31, 1.83
0.5
triple_ref
25
0.89
0.29, 2.75
0.8
25
0.68
0.25, 1.85
0.4
any_bcma_tx
25
1.12
0.25, 4.97
0.9
25
1.96
0.56, 6.91
0.3
HRCA
25
0.98
0.37, 2.60
>0.9
25
1.30
0.55, 3.03
0.5
Scatterplot
TTR by BCMA ABC at baseline in relapsed patients
Show code
data1 <- dataset %>%
filter ( relapse == 1 ) %>%
transmute (
bcma_scrn = log ( bcma_scrn ) ,
time.to.relapse = Days.to.death.or.relapse.or.DLC / 30
)
ggplot ( data1 , aes ( x= time.to.relapse , y = bcma_scrn ) ) +
geom_point ( shape = 16 ) + # Add points to the plot with shape 16 (i.e., basic circle)
theme_classic ( ) + # Use the minimal theme
geom_smooth ( aes ( x = time.to.relapse , y= bcma_scrn ) , method = "lm" , se = TRUE , color = "#104a8e" , inherit.aes = FALSE , linetype = "solid" , linewidth = 0.5 ) +
stat_cor ( method = "pearson" , label.x = 3 , label.y = 9 ) +
labs ( x = "Time to relapse (months)" , y = "log(BCMA ABC)" )
Probability plots
Hazard of OS/PFS vs sBCMA d90
Show code
data1 <- dataset %>%
select ( sBCMA.d90 , Days.to.death.or.DLC , death , Days.to.death.or.relapse.or.DLC , relapse )
dd <- datadist ( data1 )
options ( datadist= 'dd' )
fit1 <- cph ( Surv ( data1 $ Days.to.death.or.DLC , data1 $ death ) ~ sBCMA.d90 , data= data1 )
df1 <- data.frame ( Predict ( fit1 , sBCMA.d90 , fun= function ( x ) exp ( x ) ) )
fit2 <- cph ( Surv ( data1 $ Days.to.death.or.relapse.or.DLC , data1 $ relapse ) ~ sBCMA.d90 , data= data1 )
df2 <- data.frame ( Predict ( fit2 , sBCMA.d90 , fun= function ( x ) exp ( x ) ) )
ggplot ( ) +
geom_line ( data= df1 , aes ( x= sBCMA.d90 ,y= yhat , color = "OS" ) ) + geom_ribbon ( data= df1 , aes ( x= sBCMA.d90 ,ymin= lower , ymax= upper ) ,alpha= 0.10 ) +
geom_line ( data= df2 , aes ( x= sBCMA.d90 ,y= yhat , color = "PFS" ) ) + geom_ribbon ( data = df2 , aes ( x= sBCMA.d90 ,ymin= lower , ymax= upper ) ,alpha= 0.10 ) +
labs ( x = "sBCMA d90" ,
y = "Hazard" ) +
theme_classic ( ) +
scale_y_continuous ( breaks= c ( 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 , 9 ) ) +
#scale_x_continuous(breaks=c(0.25,0.5,0.75,1.0,1.25,1.5,1.75), limits=c(0.25, 1.75)) +
theme ( legend.position = c ( 0 , 1 ) ,legend.justification = c ( - 7.5 , 1.1 ) ) +
scale_color_manual ( values = c ( "steelblue" ,"coral2" ) ) +
theme ( title = element_text ( size= 20 ,face= "bold" ) ,legend.title= element_blank ( ) )
Hazard of OS/PFS vs screening BCMA ABC
Show code
data1 <- dataset %>%
select ( bcma_scrn , Days.to.death.or.DLC , death , Days.to.death.or.relapse.or.DLC , relapse )
dd <- datadist ( data1 )
options ( datadist= 'dd' )
fit1 <- cph ( Surv ( data1 $ Days.to.death.or.DLC , data1 $ death ) ~ rcs ( bcma_scrn ,3 ) , data= data1 )
df1 <- data.frame ( Predict ( fit1 , bcma_scrn , fun= function ( x ) exp ( x ) ) )
fit2 <- cph ( Surv ( data1 $ Days.to.death.or.relapse.or.DLC , data1 $ relapse ) ~ rcs ( bcma_scrn ,3 ) , data= data1 )
df2 <- data.frame ( Predict ( fit2 , bcma_scrn , fun= function ( x ) exp ( x ) ) )
ggplot ( ) +
geom_line ( data= df1 , aes ( x= bcma_scrn ,y= yhat , color = "OS" ) ) + geom_ribbon ( data= df1 , aes ( x= bcma_scrn ,ymin= lower , ymax= upper ) ,alpha= 0.10 ) +
geom_line ( data= df2 , aes ( x= bcma_scrn ,y= yhat , color = "PFS" ) ) + geom_ribbon ( data = df2 , aes ( x= bcma_scrn ,ymin= lower , ymax= upper ) ,alpha= 0.10 ) +
labs ( x = "BCMA screen" ,
y = "Hazard" ) +
theme_bw ( ) +
#scale_y_continuous(breaks=c(0,0.2,0.4,0.6,0.8,1.0), limits=c(0, 1)) +
#scale_x_continuous(breaks=c(0.25,0.5,0.75,1.0,1.25,1.5,1.75), limits=c(0.25, 1.75)) +
theme ( legend.position = c ( 0 , 1 ) ,legend.justification = c ( - 8 , 1.1 ) ) +
scale_color_manual ( values = c ( "steelblue" ,"coral2" ) ) +
theme ( title = element_text ( size= 20 ,face= "bold" ) ,legend.title= element_blank ( ) )
Hazard of PFS vs screening BCMA ABC
Show code
data1 <- dataset %>%
select ( bcma_scrn , Days.to.death.or.relapse.or.DLC , relapse )
dd <- datadist ( data1 )
options ( datadist= 'dd' )
S <- Surv ( data1 $ Days.to.death.or.relapse.or.DLC , data1 $ relapse )
f <- cph ( S ~ rcs ( bcma_scrn ,3 ) , x= TRUE , y= TRUE ,surv= TRUE ,data= data1 )
model <- Predict ( f , bcma_scrn , fun= function ( x ) exp ( x ) )
ggplot ( as.data.frame ( model ) ,aes ( x= bcma_scrn , y= yhat ) ) +
geom_ribbon ( data = model , aes ( ymin= lower , ymax= upper ) , alpha= 0.2 , linetype= 0 ) +
geom_line ( ) +
theme_bw ( ) +
labs (
x = "Screening BCMA" ,
y = "PFS (hazard)" ) +
theme ( title = element_text ( size= 16 ,face= "bold" ) ,legend.title= element_blank ( ) )
Hazard of PFS vs sBCMA nadir
Show code
data1 <- dataset %>%
select ( sbcma_nadir , Days.to.death.or.relapse.or.DLC , relapse ) %>%
filter ( ! is.na ( sbcma_nadir ) )
dd <- datadist ( data1 )
options ( datadist= 'dd' )
S <- Surv ( data1 $ Days.to.death.or.relapse.or.DLC , data1 $ relapse )
f <- cph ( S ~ sbcma_nadir , x= TRUE , y= TRUE ,surv= TRUE ,data= data1 )
model <- Predict ( f , sbcma_nadir , fun= function ( x ) exp ( x ) )
ggplot ( as.data.frame ( model ) ,aes ( x= sbcma_nadir , y= yhat ) ) +
geom_ribbon ( data = model , aes ( ymin= lower , ymax= upper ) , alpha= 0.2 , linetype= 0 ) +
geom_line ( ) +
theme_bw ( ) +
labs (
x = "sBCMA nadir" ,
y = "PFS (hazard)" ) +
theme ( title = element_text ( size= 16 ,face= "bold" ) ,legend.title= element_blank ( ) )
Hazard of PFS vs time to sBCMA nadir
Show code
data1 <- dataset %>%
select ( sbcma_nadir_timepoint , Days.to.death.or.relapse.or.DLC , relapse ) %>%
filter ( ! is.na ( sbcma_nadir_timepoint ) )
dd <- datadist ( data1 )
options ( datadist= 'dd' )
S <- Surv ( data1 $ Days.to.death.or.relapse.or.DLC , data1 $ relapse )
f <- cph ( S ~ sbcma_nadir_timepoint , x= TRUE , y= TRUE ,surv= TRUE ,data= data1 )
model <- Predict ( f , sbcma_nadir_timepoint , fun= function ( x ) exp ( x ) )
ggplot ( as.data.frame ( model ) ,aes ( x= sbcma_nadir_timepoint , y= yhat ) ) +
geom_ribbon ( data = model , aes ( ymin= lower , ymax= upper ) , alpha= 0.2 , linetype= 0 ) +
geom_line ( ) +
theme_bw ( ) +
labs (
x = "Time to sBCMA nadir (days)" ,
y = "PFS (hazard)" ) +
theme ( title = element_text ( size= 16 ,face= "bold" ) ,legend.title= element_blank ( ) )